package com.efounder.builder.base.data;

import java.util.*;
import java.io.*;
import com.efounder.object.ChildLinkParentKey;
import com.efounder.eai.data.KeyValue;

/**
 *
 * @author Skyline
 *
 */
public interface ESPRowSet extends Serializable,ChildLinkParentKey,KeyValue{
  String _dependDCT_ITEM_ = "_dependDCT_ITEM_";
  String _dependMDCT_ITEM_ = "_dependMDCT_ITEM_";

  /**
   * 正常状态
   */
  int _DATA_STATUS_NORMAL_ = 0x0000;
  /**
   * 更新状态
   */
  int _DATA_STATUS_UPDATE_ = 0x0001;
  /**
   * 插入状态
   */
  int _DATA_STATUS_INSERT_ = 0x0002;
  /**
   * 子数据集有修改
   */
  int _DATA_STATUS_CHILD_  = 0x0004;
  /**
   *
   * @param o Object
   */
  void setMasterKey(Object o);
  /**
   *
   * @param keyName String
   * @param value Number
   */
  void putNumber(String keyName, Number value);

  /**
   *
   * @param keyName
   * @param defValue
   * @return
   */
  Number getNumber(String keyName, Number defValue);

  /**
   *
   * @param keyName
   * @param value
   */
  void putString(String keyName, String value);
  /**
   *
   * @param keyName String
   * @param value String
   * @param btrim boolean
   */
  void putString(String keyName, String value, boolean btrim);

  /**
   *
   * @param keyName
   * @param defValue
   * @return
   */
  String getString(String keyName, String defValue);
  /**
   *
   * @param keyName String
   * @param defValue String
   * @return String
   */
  String getStringByTrim(String keyName, String defValue);
  /**
   *
   * @param keyName
   * @param value
   */
  void putBoolean(String keyName, Boolean value);

  /**
   *
   * @param keyName
   * @param defValue
   * @return
   */
  Boolean getBoolean(String keyName, Boolean defValue);

  /**
   *
   * @param keyName
   * @param value
   */
  void putDate(String keyName, Date value);

  /**
   *
   * @param keyName
   * @param defValue
   * @return
   */
  Date getDate(String keyName, Date defValue);

  /**
   *
   * @param keyName
   * @param value
   */
  void putObject(String keyName, Object value);
  /**
   * 
   * @param keyName
   * @param value
   * @param isTrim  存储前是否进行trim处理
   */
  void putObject(String keyName, Object value, boolean isTrim);

  /**
   *
   * @param keyName
   * @param defValue
   * @return
   */
  Object getObject(String keyName, Object defValue);

  /**
   *
   * @param dsType String
   * @return EFDataSet
   */
  EFDataSet getDataSet(String dsType);

  /**
   *
   * @param dsType String
   * @param dataSet EFDataSet
   */
  void setDataSet(String dsType, EFDataSet dataSet);
  /**
   *
   * @return String[]
   */
  String[] getDSTypes();
  /**
   *
   * @param dsType String
   */
  EFDataSet removeDataSet(String dsType);



  /**
   *
   * @param dataSet EFDataSet
   */
  void insertDataSetManager(EFDataSet dataSet);
  /**
   *
   * @param dataSet EFDataSet
   */
  void removeDataSetManager(EFDataSet dataSet);
  /**
   *
   * @param ID String
   * @param defName String
   * @return String
   */
  String getID2Name(String ColID, String ID, String defName);
  /**
   *
   * @param DCT_ID String
   * @param COL_ID String
   * @return ESPRowSet
   */
  ESPRowSet getID2RowSet(String DCT_ID, String COL_ID);
  /**
   *
   * @param ID String
   * @param Name String
   */
  void setID2Name(String ColID, String ID, String Name);
  /**
   *
   * @param DCT_ID String
   * @param COL_ID String
   * @param rowSet ESPRowSet
   */
  void setID2RowSet(String DCT_ID, String COL_ID, ESPRowSet rowSet);
  /**
   *
   * @param DCT_ID String
   * @param COL_ID String
   * @param rowSet ESPRowSet
   */
  void setID2RowSetFront(String DCT_ID, String COL_ID, ESPRowSet rowSet);
  /**
   *
   * @return int
   */
  int getDataStatus();
  /**
   *
   * @param dataStatus int
   */
  void setDataStatus(int dataStatus);

  /**
   *
   * @return ESPRowSet
   */
  ESPRowSet getPrior();
  /**
   *
   * @param rowSet ESPRowSet
   */
  void setPrior(ESPRowSet rowSet);
  /**
   *
   * @return ESPRowSet
   */
  ESPRowSet getNext();
  /**
   *
   * @param rowSet ESPRowSet
   */
  void setNext(ESPRowSet rowSet);
  /**
   *
   * @return ESPRowSet
   */
  ESPRowSet getFirst();
  /**
   *
   * @return ESPRowSet
   */
  ESPRowSet getLast();
  /**
   *
   * @param key Object
   * @param value Object
   */
  void setExtProperty(Object key, Object value);
  /**
   *
   * @param key Object
   * @param def Object
   * @return Object
   */
  Object getExtProperty(Object key, Object def);
  /**
   *
   * @return Map
   */
  java.util.Map getExtPropertys();
  /**
   *
   * @param extMap Map
   */
  void setExtPropertys(java.util.Map extMap);
  /**
   *
   * @return int
   */
  int getRowSetAppType();
  /**
   *
   * @param rowSetType int
   */
  void setRowSetAppType(int rowSetType);
  /**
   *
   * @param key String
   * @param rowSet ESPRowSet
   */
  void setExtRowSet(String key, ESPRowSet rowSet);
  /**
   *
   * @param key String
   * @param def ESPRowSet
   * @return ESPRowSet
   */
  ESPRowSet getExtRowSet(String key, ESPRowSet def);
  /**
   *
   * @param col String
   * @param def String
   * @return String
   */
  String getRowColFormula(String col);
  /**
   *
   * @param col String
   * @param f1 String
   * @return String
   */
  void setRowColFormula(String col, String f1);
  /**
   *
   * @param f1 String
   * @return String
   */
  void setRowFormula(String f1);
  /**
   *
   * @return int
   */
  int getLevel();
  /**
   *
   * @param level int
   */
  void setLevel(int level);
  /**
   *
   * @return EFDataSet
   */
  EFDataSet getDataSet();
  /**
   *
   * @param ds EFDataSet
   */
  void setDataSet(EFDataSet ds);
}
